package com.hzm.service.impl;

import com.alipay.api.AlipayApiException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hzm.config.Alipay;
import com.hzm.dao.CourseDao;
import com.hzm.dao.MemberDao;
import com.hzm.dao.OrderDao;
import com.hzm.dao.PayLogDao;
import com.hzm.entity.Member;
import com.hzm.entity.Order;
import com.hzm.entity.PayLog;
import com.hzm.service.AliPayService;
import com.hzm.vo.CourseDetailsVo;
import com.hzm.vo.ZFBOrderVo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * @program: qy137-java
 * @description:
 * @author: 皇子明
 * @create: 2021-10-24 20:59
 **/
@Service
public class AliPayServiceImpl implements AliPayService {
    @Resource
    private Alipay alipay;
    @Resource
    private OrderDao orderDao;
    @Resource
    private CourseDao courseDao;
    @Resource
    private PayLogDao payLogDao;
    @Resource
    private MemberDao memberDao;
    @Override
    public String allPay(String id, String HuiYuanId) throws AlipayApiException {
        CourseDetailsVo courseDetailsVo = courseDao.queryAllCourseAndTeacherName(id);
        ZFBOrderVo zfbOrderVo = new ZFBOrderVo();
        Order order = new Order();
        if (courseDetailsVo != null) {

            QueryWrapper<Order> orderWrapper = new QueryWrapper<>();
            orderWrapper.eq("course_id",id);
            orderWrapper.eq("member_id",HuiYuanId);
            Order order1 = orderDao.selectOne(orderWrapper);
            if (order1==null){
                //            查询会员信息
                Member member = memberDao.selectById(HuiYuanId);

//            id
//            String ID = String.valueOf((int) ((Math.random() * 10 + 0) * 1000000000));
                String ID = UUID.randomUUID().toString().replace("-", "").substring(0, 19);
                order.setId(ID);
//            订单号
//            String orderNo = String.valueOf((int) ((Math.random() * 10 + 0) * 1000000000));
                String orderNo = UUID.randomUUID().toString().replace("-", "").substring(0, 19);
                order.setOrderNo(orderNo);
//            课程id
                order.setCourseId(courseDetailsVo.getId());
//            课程名称
                order.setCourseTitle(courseDetailsVo.getTitle());
//            课程封面
                order.setCourseCover(courseDetailsVo.getCover());
//            讲师名称
                order.setTeacherName(courseDetailsVo.getName());
//            会员id
                order.setMemberId(HuiYuanId);
//            会员名称
                order.setNickname(member.getNickname());
                order.setMobile(member.getMobile());
//            课程的价格
                order.setTotalFee(courseDetailsVo.getPrice());
//            支付类型
                order.setPayType(1);
//            订单状态
                order.setStatus(0);
//            是否删除
                order.setIsDeleted(false);
//            创建时间
                order.setGmtCreate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
//            修改时间
                order.setGmtModified(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
//            进行插入操作
                int insert = orderDao.insert(order);
                PayLog payLog = new PayLog();
//                支付日志id

//                String payId = UUID.randomUUID().toString().substring(0, 18);

//                String payId = String.valueOf((int) ((Math.random() * 10 + 0) * 1000000000));
                String payId = UUID.randomUUID().toString().replace("-", "").substring(0, 19);
                payLog.setId(payId);
//                订单号
                payLog.setOrderNo(orderNo);
//                支付时间
                payLog.setPayTime(new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss").format(new Date()));
//                支付金额
                payLog.setTotalFee(courseDetailsVo.getPrice());
//                流水号
//                String transactionId = String.valueOf((int) ((Math.random() * 10 + 0) * 1000000000));
                String transactionId = UUID.randomUUID().toString().replace("-", "").substring(0, 18);
                payLog.setTransactionId(transactionId);
//                交易状态
                payLog.setTradeState("ERROR");
//                支付类型
                payLog.setPayType(1);
//                其他属性
                payLog.setAttr(null);
//                逻辑删除
                payLog.setIsDeleted(false);
//                创建时间
                payLog.setGmtCreate(new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss").format(new Date()));
//                更新时间
                payLog.setGmtModified(new SimpleDateFormat("yyyy-MM:dd:HH:mm:ss").format(new Date()));

//                  插入支付日志表

                payLogDao.insert(payLog);
//            进行查询操作
                if (insert > 0) {
//                支付宝订单编号
                    zfbOrderVo.setOut_trade_no(order.getOrderNo());
//                支付宝订单名称
                    zfbOrderVo.setSubject(order.getCourseTitle());
//                商品金额
                    zfbOrderVo.setTotal_amount(order.getTotalFee());
//                课程id
                    zfbOrderVo.setBuyer_user_id(order.getCourseId());
//                  主键
                    zfbOrderVo.setDescription(order.getId());

                    Order queryOrder = orderDao.selectById(ID);

                    alipay.pay(zfbOrderVo);
                }
            }else{
                //                支付宝订单编号
                String orderNo = order1.getOrderNo();
                //                支付宝订单名称
                String courseTitle = order1.getCourseTitle();
                //                商品金额
                BigDecimal totalFee = order1.getTotalFee();
                //                课程id
                String courseId = order1.getCourseId();
                //                  主键
                String id1 = order1.getId();
                //                支付宝订单编号
                zfbOrderVo.setOut_trade_no(orderNo);
//                支付宝订单名称
                zfbOrderVo.setSubject(courseTitle);
//                商品金额
                zfbOrderVo.setTotal_amount(totalFee);
//                课程id
                zfbOrderVo.setBuyer_user_id(courseId);
//                  主键
                zfbOrderVo.setDescription(id1);


                alipay.pay(zfbOrderVo);
            }
        }
        return alipay.pay(zfbOrderVo);
    }
}
